Milvus
Milvus
Milvus는 GenAI 애플리케이션을 위해 설계된 오픈소스 벡터 데이터베이스로, MCP(Model Context Protocol)를 통해 LLM과 원활하게 통합할 수 있습니다. 고성능 벡터 유사성 검색을 제공하며, 최소한의 성능 손실로 수백억 개의 벡터로 확장 가능합니다.
특징
- 고성능 벡터 검색: 대규모 고차원 벡터에 대한 효율적인 유사성 검색 제공
- 유연한 배포 옵션: Milvus Lite, Standalone, Distributed 및 Zilliz Cloud(관리형 서비스) 지원
- 확장성: 단일 머신에서 완전 분산 환경까지 확장 가능
- 다양한 검색 기능: 텍스트 검색, 벡터 검색, 하이브리드 검색, 메타데이터 필터링 등
- AI 도구와의 통합: LangChain, LlamaIndex, OpenAI, Hugging Face 등과 통합
MCP 통합
Milvus MCP 서버는 Milvus 벡터 데이터베이스와 LLM 간의 통신 인터페이스를 제공합니다. 이를 통해 Claude와 같은 AI 어시스턴트가 벡터 데이터베이스에 저장된 정보에 접근하고 검색할 수 있습니다.
사용 사례
- RAG(Retrieval-Augmented Generation): 대규모 문서 컬렉션에서 관련 정보 검색
- 이미지 검색: 이미지 벡터 임베딩을 저장하고 유사한 이미지 검색
- 멀티모달 검색: 텍스트와 이미지를 결합한 검색 기능
- 하이브리드 검색: 벡터 유사성과 메타데이터 필터링을 결합한 정교한 검색
- Graph RAG: 그래프 기반 지식 표현 및 검색
API
도구
Milvus MCP 서버는 다음과 같은 주요 도구를 제공합니다:
검색 및 쿼리 작업
milvus_text_search
전체 텍스트 검색을 사용하여 문서 검색
- 입력:
- collection_name: 검색할 컬렉션 이름
- query_text: 검색할 텍스트
- limit: 최대 결과 수 (기본값: 5)
- output_fields: 결과에 포함할 필드
- drop_ratio: 무시할 저빈도 용어의 비율 (0.0-1.0)
milvus_vector_search
컬렉션에서 벡터 유사성 검색 수행
- 입력:
- collection_name: 검색할 컬렉션 이름
- vector: 쿼리 벡터
- vector_field: 검색할 벡터를 포함하는 필드 (기본값: "vector")
- limit: 최대 결과 수 (기본값: 5)
- output_fields: 결과에 포함할 필드
- metric_type: 거리 메트릭 (COSINE, L2, IP) (기본값: "COSINE")
- filter_expr: 선택적 필터 표현식
milvus_query
필터 표현식을 사용하여 컬렉션 쿼리
- 입력:
- collection_name: 쿼리할 컬렉션 이름
- filter_expr: 필터 표현식 (예: 'age > 20')
- output_fields: 결과에 포함할 필드
- limit: 최대 결과 수 (기본값: 10)
컬렉션 관리
milvus_list_collections
데이터베이스의 모든 컬렉션 나열
milvus_create_collection
지정된 스키마로 새 컬렉션 생성
- 입력:
- collection_name: 새 컬렉션의 이름
- collection_schema: 컬렉션 스키마 정의
- index_params: 선택적 인덱스 파라미터
milvus_load_collection
검색 및 쿼리를 위해 컬렉션을 메모리에 로드
- 입력:
- collection_name: 로드할 컬렉션 이름
- replica_number: 복제본 수 (기본값: 1)
milvus_release_collection
메모리에서 컬렉션 해제
- 입력:
- collection_name: 해제할 컬렉션 이름
milvus_get_collection_info
특정 컬렉션의 스키마, 속성, 컬렉션 ID 등 자세한 정보 나열
- 입력:
- collection_name: 정보를 가져올 컬렉션 이름
데이터 작업
milvus_insert_data
컬렉션에 데이터 삽입
- 입력:
- collection_name: 컬렉션 이름
- data: 필드 이름을 값 리스트에 매핑하는 딕셔너리
milvus_delete_entities
필터 표현식을 기반으로 컬렉션에서 엔티티 삭제
- 입력:
- collection_name: 컬렉션 이름
- filter_expr: 삭제할 엔티티를 선택하는 필터 표현식
데이터베이스 관리
milvus_list_databases
Milvus 인스턴스의 모든 데이터베이스 나열
milvus_use_database
다른 데이터베이스로 전환
- 입력:
- db_name: 사용할 데이터베이스 이름
사용 방법
필수 조건
Milvus MCP 서버를 사용하기 전에 다음 사항이 필요합니다:
- Python 3.10 이상
- 실행 중인 Milvus 인스턴스(로컬 또는 원격)
- uv 설치(서버 실행 권장)
설치 및 실행
Milvus MCP 서버는 설치 없이 uv로 직접 실행하는 것이 권장됩니다:
uv run src/mcp_server_milvus/server.py --milvus-uri http://localhost:19530
또는 환경 변수를 사용하여 구성할 수 있습니다:
MILVUS_URI="http://localhost:19530"
MILVUS_TOKEN="your_token_here" # 선택 사항
MILVUS_DB="default" # 선택 사항
Claude Desktop 연동
Claude Desktop에서 Milvus MCP 서버를 사용하려면:
- Claude Desktop 설정 파일을 열기:
-
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json -
다음 구성 추가:
{ "mcpServers": { "milvus": { "command": "/PATH/TO/uv", "args": [ "--directory", "/path/to/mcp-server-milvus/src/mcp_server_milvus", "run", "server.py", "--milvus-uri", "http://localhost:19530" ] } } } -
Claude Desktop 재시작
Cursor 연동
Cursor에서 Milvus MCP 서버를 사용하는 두 가지 방법:
방법 1: Cursor 설정 UI 사용
- Cursor 설정 > 기능 > MCP로 이동
- "+ Add New MCP Server" 버튼 클릭
- 양식 작성:
- 유형:
stdio선택 - 이름:
milvus - 명령어:
/PATH/TO/uv --directory /path/to/mcp-server-milvus/src/mcp_server_milvus run server.py --milvus-uri http://127.0.0.1:19530
방법 2: 프로젝트별 구성(권장)
- 프로젝트 루트에
.cursor/mcp.json파일 생성 - 다음 내용으로 파일 채우기:
{ "mcpServers": { "milvus": { "command": "/PATH/TO/uv", "args": [ "--directory", "/path/to/mcp-server-milvus/src/mcp_server_milvus", "run", "server.py", "--milvus-uri", "http://127.0.0.1:19530" ] } } } - Cursor 재시작 또는 창 새로고침
사용 예시
Claude Desktop 사용 예시
예시 1: 컬렉션 나열
사용자: 내 Milvus DB에 어떤 컬렉션이 있나요?
Claude는 MCP를 사용하여 Milvus DB에서 이 정보를 확인합니다:
Milvus 데이터베이스에 있는 컬렉션:
1. rag_demo
2. test
3. chat_messages
4. text_collection
5. image_collection
6. customized_setup
7. streaming_rag_demo
예시 2: 문서 검색
사용자: text_collection에서 "machine learning"을 언급하는 문서를 찾아주세요.
Claude는 Milvus의 전체 텍스트 검색 기능을 사용하여 관련 문서를 찾습니다:
text_collection에서 machine learning에 관한 문서를 검색하겠습니다.
> milvus의 milvus-text-search 결과 보기(로컬)
machine learning을 언급하는 다음 문서를 찾았습니다:
[실제 데이터에 따른 결과가 여기에 표시됩니다]
Cursor 사용 예시
예시: 컬렉션 생성
사용자: 제목(문자열), 내용(문자열) 및 벡터 필드(128차원)에 대한 필드가 있는 'articles'라는 새 컬렉션을 Milvus에 생성해주세요.
Cursor는 MCP 서버를 사용하여 이 작업을 실행합니다:
지정된 필드로 'articles'라는 새 컬렉션을 생성하겠습니다.
컬렉션 'articles'가 다음 스키마로 성공적으로 생성되었습니다:
- title: 문자열
- content: 문자열
- vector: 부동 소수점 벡터[128]
연결된 구성 요소
문제 해결
일반적인 문제
연결 오류
"Failed to connect to Milvus server"와 같은 오류가 표시되는 경우:
- Milvus 인스턴스가 실행 중인지 확인(docker ps(Docker 사용 시))
- URI가 구성에서 올바른지 확인
- 연결을 차단하는 방화벽 규칙이 없는지 확인
- URI에서 localhost 대신 127.0.0.1 사용 시도
인증 문제
인증 오류가 표시되는 경우:
- MILVUS_TOKEN이 올바른지 확인
- Milvus 인스턴스에 인증이 필요한지 확인
- 시도하는 작업에 대한 올바른 권한이 있는지 확인
도구를 찾을 수 없음
MCP 도구가 Claude Desktop 또는 Cursor에 표시되지 않는 경우: - 애플리케이션 재시작 - 서버 로그에서 오류 확인 - MCP 서버가 올바르게 실행 중인지 확인 - Cursor의 MCP 설정에서 새로고침 버튼 누르기